package com.soup.hummingbird;

import com.soup.hummingbird.module.jvm.JvmMetricCollect;
import com.soup.hummingbird.module.method.probe.ProfilingTransformer;
import com.soup.hummingbird.module.threadpool.ThreadPoolExecutorTransformer;
import com.soup.hummingbird.transformer.TransformerTest;

import java.lang.instrument.Instrumentation;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * 〈入口方法〉<br>
 *
 * @author zhaoyi
 * @date 2021-04-04 17:12
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public class PreMain {
    // jvm 首先尝试再代理类上调用以下方法
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("this is my agent: " + agentArgs);
        // inst.addTransformer(new ProfilingTransformer());
        // inst.addTransformer(new TransformerTest());

        inst.addTransformer(new ThreadPoolExecutorTransformer());

        /**
         * 定时采集jvm信息
         * 每隔5秒输出一次内存信息和GC信息
         */
        /*Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
            JvmMetricCollect.memoryInfo();
            JvmMetricCollect.gcInfo();
        }, 0, 5000, TimeUnit.MILLISECONDS);*/
    }

    // 如果代理类上没有提供premain方法，则jvm将尝试调用下面的方法
    public static void premain(String agentArgs) {

    }
}
